package leetcode.题库.链表;


import leetcode.题库.pubclass.ListNode;

/**
 * 两数相加
 *
 * @author yanzhenming
 * @date 2023/3/22  15:13
 */

/**
 * 描述
 *
 * 给你两个非空的链表，表示两个非负的整数。它们每位数字都是按照逆序的方式存储的，并且每个节点只能存储一位数字
 * 请你将两个数相加，并以相同形式返回一个表示和的链表。
 * 你可以假设除了数字0之外，这两个数都不会以0开头。
 *
 * 如 243+564 = 708
 */

/**
 * 思路
 *
 * 先将都有的位置进行相加
 * 再对单独有的位置进行相加
 * 再对进位进行判断
 *
 */

public class Solution2 {
    public static void main(String[] args) {

    }
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int carry = 0;
        ListNode sentry = new ListNode(-1);
        ListNode head = sentry;
        while (l1 != null && l2!= null) {
            ListNode temp = new ListNode((l1.val + l2.val + carry)%10);
            carry = (l1.val + l2.val + carry)/10;
            head.next = temp;
            head = head.next;
            l1 = l1.next;
            l2 = l2.next;
        }
        while (l1 != null) {
            ListNode temp = new ListNode((l1.val + carry)%10);
            carry = (l1.val + carry)/10;
            head.next = temp;
            head = head.next;
            l1 = l1.next;
        }
        while (l2 != null) {
            ListNode temp = new ListNode((l2.val + carry)%10);
            carry = (l2.val + carry)/10;
            head.next = temp;
            head = head.next;
            l2 = l2.next;
        }
        if (carry != 0)
            head.next = new ListNode(carry);
        return sentry.next;
    }
}
